#include <iostream>

using namespace std;

char matrix[21][21];  // 用与存储地图
bool visited[21][21]; // 用于保存已经访问过的位置
int w,h;
int starx,stary;  // 记录开始的坐标
int dirx[4] = {1,-1,0,0},diry[4] = {0,0,1,-1};  // 进行方向遍历
int newx,newy;  // 记录新的坐标
int sum = 1;  // 记录所走过的步数
void dfs(int x,int y) {
    sum++;
    visited[x][y] = true;

    for(int i = 0;i < 4;i++) {
        newx = x + dirx[i];
        newy = y + diry[i];

        // 如果没有超过地图范围，且新坐标为黑色，并且没有走过，那么则继续搜索
        if (newx >= 0 && newx < h && newy >= 0 && newy < w && matrix[newx][newy] == '.' &&
            !visited[newx][newy]) {
            dfs(newx,newy);
            }
    }
}

int main() {
    cin >> w >> h;
    while (w != 0 && h != 0) {
        for(int i = 0;i < h;i++) {
            for(int j = 0;j < w;j++) {
                cin >> matrix[i][j];
                if (matrix[i][j] == '@') {
                    starx = i;
                    stary = j;
                }
            }
        }
        // 初始化访问标记
        for (int i = 0; i < h; i++) {
            for (int j = 0; j < w; j++) {
                visited[i][j] = false; // 所有瓷砖初始为未访问
            }
        }
        sum = 0;
        dfs(starx,stary);
        cout << sum <<endl;
        cin >> w >> h;
    }
}